/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.cultuurschuur.entity;

import java.io.*;
import javax.persistence.*;

/**
 *
 * @author Jolien
 */
@NamedQueries({
    
    @NamedQuery(name = "Reis.getById", query = "select r from Reis r where r.id = ?1"),
    @NamedQuery(name = "Reis.getAllPlaatsen", query = "select DISTINCT r.aantalPlaatsen from Reis r"),
    
    //bestemming != null
        //periode != null
            //plaatsen != 0
                //vervoer != null
    @NamedQuery(name="Reis.getByBestemmingPeriodePlaatsenVervoer", query = "select r from Reis r where r.bestemming.id = ?1 and r.periode.id = ?2 and r.aantalPlaatsen = ?3 and r.vervoer.id = ?4"),
                //vervoer == null
    @NamedQuery(name="Reis.getByBestemmingPeriodePlaatsen", query = "select r from Reis r where r.bestemming.id = ?1 and r.periode.id = ?2 and r.aantalPlaatsen = ?3"),
            //plaatsen == 0
                //vervoer != null
    @NamedQuery(name="Reis.getByBestemmingPeriodeVervoer", query = "select r from Reis r where r.bestemming.id = ?1 and r.periode.id = ?2 and r.vervoer.id = ?3"),
                //vervoer == null
    @NamedQuery(name="Reis.getByBestemmingPeriode", query = "select r from Reis r where r.bestemming.id = ?1 and r.periode.id = ?2"),
        //periode == null
            //plaatsen != 0
                //vervoer != null
    @NamedQuery(name="Reis.getByBestemmingPlaatsenVervoer", query = "select r from Reis r where r.bestemming.id = ?1 and r.aantalPlaatsen = ?2 and r.vervoer.id = ?3"),
                //vervoer == null
    @NamedQuery(name="Reis.getByBestemmingPlaatsen", query = "select r from Reis r where r.bestemming.id = ?1 and r.aantalPlaatsen = ?2"),
            //plaatsen == 0
                //vervoer != null
    @NamedQuery(name="Reis.getByBestemmingVervoer", query = "select r from Reis r where r.bestemming.id = ?1 and r.vervoer.id = ?2"),
                //vervoer == null
    @NamedQuery(name="Reis.getByBestemming", query = "select r from Reis r where r.bestemming.id = ?1"),
    //bestemming == null
        //periode != null
            //plaatsen != 0
                //vervoer != null
     @NamedQuery(name="Reis.getByPeriodePlaatsenVervoer", query = "select r from Reis r where r.periode.id = ?1 and r.aantalPlaatsen = ?2 and r.vervoer.id = ?3"),                       
                //vervoer == null
    @NamedQuery(name="Reis.getByPeriodePlaatsen", query = "select r from Reis r where r.periode.id = ?1 and r.aantalPlaatsen = ?2"),
            //plaatsen == 0
                //vervoer != null
    @NamedQuery(name="Reis.getByPeriodeVervoer", query = "select r from Reis r where r.periode.id = ?1 and r.vervoer.id = ?2"),
                //vervoer == null
    @NamedQuery(name="Reis.getByPeriode", query = "select r from Reis r where r.periode.id = ?1"),
        //periode == null
            //plaatsen != 0
                //vervoer != null
    @NamedQuery(name="Reis.getByPlaatsenVervoer", query = "select r from Reis r where r.aantalPlaatsen = ?1 and r.vervoer.id = ?2"),
                //vervoer == null
    @NamedQuery(name="Reis.getByPlaatsen", query = "select r from Reis r where r.aantalPlaatsen = ?1"),
            //plaatsen == 0
                //vervoer != null
    @NamedQuery(name="Reis.getByVervoer", query = "select r from Reis r where r.vervoer.id = ?1"),
                //vervoer == null
    @NamedQuery(name = "Reis.getAll", query = "select r from Reis r")    
        
})

@Entity
public class Reis implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @ManyToOne
    private Bestemming bestemming;
    @ManyToOne
    private Periode periode;
    @ManyToOne
    private Vervoer vervoer;
    private int aantalPlaatsen;
    private Double prijsPerPersoon;
    private String plaatsVanVertrek;

    public Bestemming getBestemming() {
        return bestemming;
    }

    public void setBestemming(Bestemming bestemming) {
        this.bestemming = bestemming;
    }

    public Periode getPeriode() {
        return periode;
    }

    public void setPeriode(Periode periode) {
        this.periode = periode;
    }

    public Vervoer getVervoer() {
        return vervoer;
    }

    public void setVervoer(Vervoer vervoer) {
        this.vervoer = vervoer;
    }
    
    public int getAantalPlaatsen() {
        return aantalPlaatsen;
    }

    public void setAantalPlaatsen(int aantalPlaatsen) {
        this.aantalPlaatsen = aantalPlaatsen;
    }

    public Double getPrijsPerPersoon() {
        return prijsPerPersoon;
    }

    public void setPrijsPerPersoon(Double prijsPerPersoon) {
        this.prijsPerPersoon = prijsPerPersoon;
    }

    public String getPlaatsVanVertrek() {
        return plaatsVanVertrek;
    }

    public void setPlaatsVanVertrek(String plaatsVanVertrek) {
        this.plaatsVanVertrek = plaatsVanVertrek;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Reis)) {
            return false;
        }
        Reis other = (Reis) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return bestemming + " voor de periode van: " + periode;
    }
    
}
